package com.epkursant.app.kursant;

import com.ep.general.ActionSupportCustom;
import com.ep.general.kursant.Kursant;
import com.ep.general.kursant.KursantMdt;

public class AddKursantAction extends ActionSupportCustom<Kursant> {

	private static final long serialVersionUID = -8297838393064031734L;
	private final String ERROR_MESSAGE_REJESTRACJA = "error_rejestracja";

	private KursantMdt kursantMdt;
	private KursantForm form;

	public String execute() throws Exception {
		return ERROR_MESSAGE_REJESTRACJA;
	}

	public String saveNewKursant() {
		Kursant kursant = getForm().getData();

		if (kursant != null) {
			// walidation only for addning new
			String login = kursant.getLogin();
			if (!getKursantMdt().isLoginUnique(login) || login == null) {
				addActionError("Login zajęty");
				return ERROR_MESSAGE_REJESTRACJA;
			}

			if (!getKursantMdt().isEmailUnique(kursant.getEmail())
					|| kursant.getEmail() == null) {
				addActionError("Email już istnieje w bazie");
				return ERROR_MESSAGE_REJESTRACJA;
			}

			if (kursant.getDataUrodzin() == null) {
				addActionError("Niepoprawna data urodzin");
				return ERROR_MESSAGE_REJESTRACJA;
			}

			// standart walidation
			if (!walidateForm(kursant)) {
				return ERROR_MESSAGE_REJESTRACJA;
			}

			kursant.setGodzJazdy(0);
			kursant.setGodzWykladu(0);

			getKursantMdt().makePersistent(kursant);

		} else {
			return ERROR_MESSAGE_REJESTRACJA;
		}

		return SUCCESS;
	}

	public String edit() {
		Kursant newKursant = getForm().getData();
		if (!walidateForm(newKursant)) {
			return ERROR_MESSAGE_REJESTRACJA;
		}

		Kursant oldKursant = (Kursant) getSession().get(LOGGED_USER);
		newKursant.setLogin(oldKursant.getLogin());
		newKursant.setGodzJazdy(oldKursant.getGodzJazdy());
		newKursant.setGodzWykladu(oldKursant.getGodzWykladu());
		newKursant.setInstruktor(oldKursant.getInstruktor());
		newKursant.setDataUrodzin(oldKursant.getDataUrodzin());

		if (oldKursant.compareAndCopy(newKursant)) {
			getKursantMdt().makePersistent(oldKursant);

		}

		return EDIT;
	}

	private boolean walidateForm(Kursant kursant) {
		if (kursant.getHaslo().trim().length() < 2
				|| kursant.getHaslo() == null) {
			addActionError("Niepoprawne hasło");
			return false;
		}

		if (kursant.getNazwisko().trim().length() < 2
				|| kursant.getNazwisko() == null) {
			addActionError("Niepoprawne nazwisko");
			return false;
		}

		if (kursant.getImie().trim().length() < 2 || kursant.getImie() == null) {
			addActionError("Niepoprawne imię");
			return false;
		}

		if (kursant.getImie2().trim().length() < 2
				|| kursant.getImie2() == null) {
			addActionError("Niepoprawne drugie imię");
			return false;
		}

		if (kursant.getEmail().trim().length() < 2
				|| kursant.getEmail() == null) {
			addActionError("Niepoprawny email");
			return false;
		}

		if (kursant.getPesel().trim().length() != 11
				|| kursant.getPesel() == null) {
			addActionError("Niepoprawny PESEL");
			return false;
		}

		if (kursant.getTelefon().trim().length() < 8
				|| kursant.getTelefon() == null
				|| kursant.getTelefon().trim().length() > 15) {
			addActionError("Niepoprawny nr telefonu");
			return false;
		}

		return true;
	}

	public KursantForm getForm() {
		if (form == null)
			form = new KursantForm();
		return form;
	}

	public void setForm(KursantForm form) {
		this.form = form;
	}

	private KursantMdt getKursantMdt() {
		if (kursantMdt == null)
			kursantMdt = new KursantMdt();
		return kursantMdt;
	}

}
